package com.lonely.fx;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollBar;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 * @date: 2022-07-20 09:47
 * @author: ztkj-hzb
 * @description: 滚动条组件
 **/
public class ScrollBarSettingMain extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    /**
     *
     */
    @Override
    public void start(Stage primaryStage) throws Exception {

        AnchorPane anchorPane = new AnchorPane();

        VBox vBox = new VBox();
        vBox.setStyle("-fx-background-color: pink");

        for (int i = 1; i <= 30; i++) {
            vBox.getChildren().add(new Button("Button" + i));
        }

        //TODO 创建滚动条
        ScrollBar scrollBar = new ScrollBar();

        //设置滚动条方向
        scrollBar.setOrientation(Orientation.VERTICAL);

        //设置滚动条的最大值和最小值，默认是0.0~100.0之间
        //scrollBar.setMin(0.0);
        //scrollBar.setMax(1.0);

        //设置当前滚动条进度位置
        //scrollBar.setValue(0.5);

        //设置 increment或者decrement时候的量
        //scrollBar.setUnitIncrement(0.3);

        //单击滚动条的轨道时调整滚动条的量。
        scrollBar.setBlockIncrement(10);

        //滚动条范围的可见量，默认是15
        scrollBar.setVisibleAmount(30);

        //事件
        scrollBar.valueProperty().addListener((observable, oldValue, newValue) -> {
            //设置vbox的偏移量
            vBox.setLayoutY(-newValue.doubleValue());
        });

        anchorPane.getChildren().addAll(vBox, scrollBar);
        primaryStage.setScene(new Scene(anchorPane));
        primaryStage.setWidth(600);
        primaryStage.setHeight(500);
        primaryStage.show();

        //实现滚动条和vbox的联动
        scrollBar.setPrefHeight(anchorPane.getHeight());

        double simpleHeight = ((Button) vBox.getChildren().get(0)).getHeight();
        scrollBar.setMax(vBox.getChildren().size() * simpleHeight / 2.0);
        AnchorPane.setLeftAnchor(scrollBar, vBox.getWidth() + 10);
    }
}
